import com.gxa.mapper.EventMapper;
import com.gxa.mapper.GoodsTypeMapper;
import com.gxa.pojo.Event;
import com.gxa.pojo.Goodstype;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 * User: 赵贺益
 * Date: 2021/11/18 20:01
 * Description:
 * Version: V1.0
 */
public class Mybatis03 {
    SqlSession sqlSession;
    @Before
    public  void before() throws IOException {
//        读取的mybatis核心配置文件
        String resource = "Mybatis.xml";
//        通过流的方式读取核心配置文件，把它加载到内存中
        InputStream inputStream = Resources.getResourceAsStream(resource);
//        创建SqlSessionFactory工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//        通过工厂对象调用获得SqlSession对象  //默认是手动提交；如果要改变为自动提交，则设置为true表示自动提交
        sqlSession=sqlSessionFactory.openSession(true);
    }


//12.	动态SQL的if使用
    /**
     *当只传入一个参数而不是传入对象或者map时，返回一个List<Map>
     */
    @Test
    public void  test01(){
        GoodsTypeMapper goodsTypeMapper=sqlSession.getMapper(GoodsTypeMapper.class);
//        Goodstype goodstype=new Goodstype();
//        goodstype.setGt_name("赵贺益");
//         List<Map> goodsTypeListMap= goodsTypeMapper.selectListMapGoodsType(goodstype);
         List<Map> goodsTypeListMap= goodsTypeMapper.selectListMapGoodsType(null);
        System.out.println(goodsTypeListMap);
    }

    /**13.	动态SQL的where使用
     * 如果我们有多个条件需要添加，但是有可能一个条件都不满足
     * 传入一个对象
     * 返回一个集合对象 List<Goodstype>
     */
    @Test
    public void  test02(){
        GoodsTypeMapper goodsTypeMapper=sqlSession.getMapper(GoodsTypeMapper.class);
        Goodstype goodstype=new Goodstype();
        goodstype.setGt_name("赵贺益");
        goodstype.setGt_level(2);
        System.out.println(goodstype);
        List<Goodstype> goodsTypeList= goodsTypeMapper.selectListGoodsType(goodstype);
        System.out.println(goodsTypeList);
    }

/**
 * 14.	动态SQL的choose  when使用
 * 传入一个对象
 * 返回一个集合对象List《GoodsType》
 */
@Test
public void  test03(){
    GoodsTypeMapper goodsTypeMapper=sqlSession.getMapper(GoodsTypeMapper.class);
    Goodstype goodstype=new Goodstype();
    goodstype.setGt_name("谢志浩");
    goodstype.setGt_no(12);
    goodstype.setGt_level(2);
    goodstype.setGt_state(1);
//    System.out.println(goodstype);
    List<Goodstype> goodsTypeList= goodsTypeMapper.selectListGoodsType02(goodstype);
    System.out.println(goodsTypeList);
}

/**
 * 根据条件进行修改表的操作
 */
@Test
public  void  test04(){
    GoodsTypeMapper goodsTypeMapper=sqlSession.getMapper(GoodsTypeMapper.class);
    Goodstype goodstype=new Goodstype();
    goodstype.setGt_name("哪吒");
    goodstype.setGt_level(1);
    goodstype.setGt_state(0);
    Integer result= goodsTypeMapper.updateGoodsTypeByList(goodstype);
    System.out.println(result);
}

/**
 * 传入集合对象，然后利用foreach进行删除等相关操作
 */
@Test
public  void  test05(){
    GoodsTypeMapper goodsTypeMapper=sqlSession.getMapper(GoodsTypeMapper.class);
//    Goodstype goodstype1=new Goodstype();
//    Goodstype goodstype2=new Goodstype();
//    Goodstype goodstype3=new Goodstype();
//    goodstype1.setGt_level(0);
//    goodstype1.setGt_level(1);
//    goodstype1.setGt_level(2);
    List<Integer> list=new ArrayList<>();
    list.add(3);
    list.add(4);
    list.add(2);
    Integer result= goodsTypeMapper.deleteGoodsTypeByList(list);
    System.out.println(result);
}

}
